home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <dos.h>
- #include "define.h"
- /* #include <cdrfrb.h> */
-
- #ifdef DEBUG
- main(int argc, char *argv[])
- {
- struct TIMEADRS time, time2;
- int status, no;
-
- printf("return is %x\n", cdr_mphase(0, &status, &no, &time, &time2));
- if (status) {
- printf("現在 %d曲目を演奏中\n", no);
- }
- printf("track %d分 %d秒 %dフレーム\n", time.min, time.sec, time.frame);
- printf("disk %d分 %d秒 %dフレーム\n", time2.min, time2.sec, time2.frame);
-
- }
- #endif
-
- /* 音楽演奏状態の読み取り(時間指定) */
- /*
- * decice_no: device number (Towns CD-ROM -> 0)
- * status: 演奏状態 1 -> 演奏中
- * music_num: 現在演奏中の曲番号
- * track_time: トラック内演奏時間
- * disk_time: ディスク内演奏時間
- * return: 0 -> 正常終了, 0以外 -> エラー
- */
- int cdr_mphase(int device_no, int *status, int *music_num, struct TIMEADRS *track_time, struct TIMEADRS *disk_time)
- {
- union REGS reg;
- struct SREGS seg;
- char buf[10];
-
- reg.h.ah = 0x53;
- reg.h.al = (0xC0 | (u_char) device_no);
- reg.x.cx = 0x0000;
-
- reg.x.di = (u_int) buf;
- segread(&seg);
- seg.ds = seg.ss;
-
- int86x(0x93, ®, ®, &seg);
-
- if (status) {
- *status = (u_int) reg.h.al;
- }
- if (music_num) {
- *music_num = (u_int) buf[1];
- }
- if (track_time) {
- track_time->min = buf[3]; /* 分 */
- track_time->sec = buf[4]; /* 秒 */
- track_time->frame = buf[5]; /* フレーム */
- }
- if (disk_time) {
- disk_time->min = buf[7]; /* 分 */
- disk_time->sec = buf[8]; /* 秒 */
- disk_time->frame =buf[9]; /* フレーム */
- }
- if (reg.h.ah == 0) {
- return 0;
- } else if (reg.h.ah == 0x02) { /* device number error */
- return DEVERR;
- } else { /* (reg.h.ah == 0x80) hard ware error */
- return reg.x.cx;
- }
- }
-
-